Spring的 Resource接口提供了对底层资源更强大的访问能力。

public interface Resource extends InputStreamSource {

    boolean exists();

    boolean isOpen();

    URL getURL() throws IOException;

    File getFile() throws IOException;

    Resource createRelative(String relativePath) throws IOException;

    String getFilename();

    String getDescription();

}
public interface InputStreamSource {

    InputStream getInputStream() throws IOException;

}

Resource接口中一些重要的方法:
getInputStream():定位并打开资源,从资源中读取Inputstream并返回。每次调用都会返回一个新的InputStream。方法的调用者有责任去关闭输出流。 exists():返回一个Boolean值指明这个资源是否存在。 isOpen():返回一个Boolean值指明这个资源是否有打开的句柄。 如果为true,则这个InputStream不能被读取多次,而只能读取一次,并且需要关闭以免资源泄漏。 对于绝大部分的的Resource的实现返回值都是false的,除了InputStreamResource getDescription():返回这个资源的描述,用来在使用资源的时候输出错误。返回值通常是文件的全限定名或是实际的URL资源。
其他方法允许你获取代表这资源的URLFile对象(如果底层实现是允许的,且支持这个功能)。
Resource在Spring中被广泛使用,当需要一个资源时,作为参数被传入。在Spring APIs中的一些方法(比如一些ApplicationContext的构造函数)需要一个String,用一个简单的方式来创建适合context实现的Resource,或者通过String特定的前缀来允许调用者指明将被创建和使用的特定Resource类型。 尽管Resource在Spring中被大量的使用,它也可以在你不知道不了解Spring其余部分内容的时候,被你在自己的代码中当作工具类用来访问资源。虽然,这会让你的代码耦合到Spring上,但这只是在工具类这一小部分发生了耦合,这些工具类将会很好的代替URL,其他你考虑用来处理这个功能的工具类同样会是你的代码产生耦合。
值得注意的是,Respurce并不是取代:它尽可能包装它。 例如,UrlResource包装了一个URL,并使用包装的URL来完成其工作。